package com.punai.customer.mapper;

import com.punai.common.core.mapper.CommonMapper;
import com.punai.customer.domain.CusGxLinkGkCategories;
import com.punai.customer.domain.vo.CusGxLinkGkCategoriesVo;
import com.punai.gk.domain.vo.SimplifyVo;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 标准费用项下材料类别关联归口Mapper接口
 *
 * @author zhx
 * @date 2023-03-28
 */
public interface CusGxLinkGkCategoriesMapper extends CommonMapper<CusGxLinkGkCategories>
{
    /**
     * 查询标准费用项下材料类别关联归口
     *
     * @param id 标准费用项下材料类别关联归口主键
     * @return 标准费用项下材料类别关联归口
     */
    public CusGxLinkGkCategories selectCusGxLinkGkCategoriesById(@Param("id") String id,@Param("companyId") Long companyId);

    /**
     * 查询标准费用项下材料类别关联归口列表
     *
     * @param cusGxLinkGkCategories 标准费用项下材料类别关联归口
     * @return 标准费用项下材料类别关联归口集合
     */
    public List<CusGxLinkGkCategories> selectCusGxLinkGkCategoriesList(CusGxLinkGkCategories cusGxLinkGkCategories);


    /**
     * 删除标准费用项下材料类别关联归口
     *
     * @param id 标准费用项下材料类别关联归口主键
     * @return 结果
     */
    // 根据ID删除自己
    public int deleteCusGxLinkGkCategoriesById(@Param("id") String id, @Param("companyId") Long companyId);
    // 根据标准费用项删除
    public int deleteCusGxLinkGkCategoriesByGxId(@Param("gxId") String gxId, @Param("companyId") Long companyId);
    // 根据特征关联删除
    public int deleteCusGxLinkGkCategoriesByGxLinkGkId(@Param("gxLinkGkId") String gxLinkGkId, @Param("companyId") Long companyId);
    // 根据类别删除
    // 客户端改为逻辑删除后不再使用
    public int deleteCusGxLinkGkCategoriesByCategoriesId(@Param("categoriesId") String categoriesId, @Param("companyId") Long companyId);

    // 逻辑删除归口关联
    public int updateDelFlagIsTwo(@Param("gxId") String gxId,@Param("categoriesIds") List<String> categoriesIds, @Param("companyId") Long companyId);
    // 恢复归口关联
    public int updateDelFlagIsZero(@Param("gxId") String gxId,@Param("companyId") Long companyId,@Param("categoryIds") List<String> categoryIds);

    /**
     * 批量删除标准费用项下材料类别关联归口
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteCusGxLinkGkCategoriesByIds(String[] ids);

    public List<CusGxLinkGkCategoriesVo> selectListByGxLinkGkId(@Param("gxLinkGkId") String gxLinkGkId, @Param("companyId") Long companyId);

    Integer getMaxOrderNumByLinkGkFeatureId(@Param("gxLinkGkId") String gxLinkGkId, @Param("companyId") Long companyId);

    Integer delLinkGkId(@Param("gkId") String gkId,@Param("categoriesId") String categoriesId, @Param("companyId") Long companyId);

    Integer clearLinkGkItemByCategorieId(@Param("nullGkItem") String nullGkItem,@Param("categoriesId") String categoriesId, @Param("companyId") Long companyId);

    List<SimplifyVo> getHistoryCategories(@Param("companyId") Long companyId, @Param("specId") String specId, @Param("gkType") String gkType);

    Integer updateGkItemById(@Param("companyId") Long companyId, @Param("id") String id, @Param("gkType") String gkType, @Param("gkId") String gkId);

    Integer updateGkItemByGxId(@Param("companyId") Long companyId, @Param("gxIds") List<String> gxIds,@Param("categoryId") String categoryId, @Param("gkType") String gkType, @Param("gkId") String gkId);

    Integer updateGkItemBySpecId(@Param("companyId") Long companyId, @Param("specId") String specId,@Param("categoryId") String categoryId, @Param("gkType") String gkType, @Param("gkId") String gkId);
}
